library(ggplot2)
library(grid)
library(gridExtra)
# Set theme elements for consistent appearance
my_theme <- theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5, size = 14, face = "bold"),
plot.subtitle = element_text(hjust = 0.5, size = 12),
axis.title = element_text(size = 11),
panel.grid.minor = element_blank(),
legend.position = "bottom"
)
# Create timeline diagram showing study flow
create_study_timeline <- function() {
# Define the key timepoints
timepoints <- data.frame(
day = c(-14, 0, 3, 14, 21, 30, 90, 180),
label = c("Screening", "Day 1\nInduction", "Day 3", "Day 14", "Day 21", "30 Days\nPost-Tx", "3 Months", "6 Months"),
phase = c("Screening", "Treatment", "Treatment", "Treatment", "Treatment", "Follow-up", "Follow-up", "Follow-up")
)
# Create the plot
ggplot(timepoints, aes(x = day, y = 0)) +
# Add connecting line
geom_line(size = 1.5, color = "gray70") +
# Add points for each timepoint
geom_point(aes(color = phase), size = 8) +
# Add labels
geom_text(aes(label = label), size = 3.5) +
# Set colors
scale_color_manual(values = c(
"Screening" = "#3498db",
"Treatment" = "#e74c3c",
"Follow-up" = "#2ecc71"
)) +
# Set axis limits and labels
scale_x_continuous(
breaks = timepoints$day,
labels = paste("Day", timepoints$day),
limits = c(-20, 190)
) +
labs(
title = "AU-018 Phase I Trial Timeline",
x = "Study Day",
y = ""
) +
my_theme +
theme(
axis.text.y = element_blank(),
axis.ticks.y = element_blank()
)
}
# Create day 1 treatment administration diagram
create_treatment_diagram <- function() {
# Create base plot
plot <- ggplot() +
# Set up the canvas
scale_x_continuous(limits = c(-5, 95), breaks = c(0, 30, 60, 90)) +
scale_y_continuous(limits = c(0, 4)) +
labs(
title = "Day 1 Treatment Administration",
x = "Minutes",
y = ""
) +
my_theme +
theme(
axis.text.y = element_blank(),
axis.ticks.y = element_blank()
)
# Add timeline base
plot <- plot + geom_segment(aes(x = 0, xend = 90, y = 1, yend = 1),
arrow = arrow(length = unit(0.3, "cm")),
size = 0.8)
# Add time markers
plot <- plot + geom_text(aes(x = c(0, 30, 60, 90), y = 1.4,
label = c("0 min", "30 min", "60 min", "90 min")),
size = 3)
# Add treatment blocks - simplified version
# AU-018 Bolus (0-5 min)
plot <- plot +
geom_rect(aes(xmin = 0, xmax = 5, ymin = 2.4, ymax = 3.0),
fill = "#3498db", alpha = 0.8) +
geom_text(aes(x = 2.5, y = 3.3, label = "AU-018 Bolus\n(300 mg/m²)"), size = 3)
# AU-018 Infusion (5-60 min)
plot <- plot +
geom_rect(aes(xmin = 5, xmax = 60, ymin = 2.4, ymax = 3.0),
fill = "#9b59b6", alpha = 0.8) +
geom_text(aes(x = 32.5, y = 2.7, label = "AU-018 Infusion (150 mg/m²/hr)"),
color = "white", size = 3)
# Anthracycline (30-45 min)
plot <- plot +
geom_rect(aes(xmin = 30, xmax = 45, ymin = 1.8, ymax = 2.4),
fill = "#e74c3c", alpha = 0.8) +
geom_text(aes(x = 37.5, y = 2.1, label = "Anthracycline"),
color = "white", size = 3)
return(plot)
}
# Create a simplified assessment schedule table
create_assessment_table <- function() {
# Define assessment types
assessments <- c(
"Physical Exam",
"ECG",
"Echocardiogram",
"Cardiac Biomarkers",
"CBC",
"Chemistry",
"Bone Marrow"
)
# Create a grid for text placement
grid_data <- expand.grid(
assessment = assessments,
timepoint = c("Screening", "Day 1", "Day 14", "Day 21", "30d Post", "3mo", "6mo")
)
# Define which assessments are done at which timepoints (X = required)
grid_data$required <- c(
# Physical Exam
"X", "X", "X", "X", "X", "X", "X",
# ECG
"X", "X", "X", "", "X", "X", "X",
# Echo
"X", "", "X", "X", "X", "X", "X",
# Cardiac Biomarkers
"X", "X", "X", "", "X", "X", "X",
# CBC
"X", "X", "X", "X", "X", "", "",
# Chemistry
"X", "X", "X", "X", "X", "", "",
# Bone Marrow
"X", "", "X", "X", "", "", ""
)
# Create table plot
ggplot(grid_data, aes(x = timepoint, y = assessment)) +
geom_tile(color = "black", fill = "white", size = 0.5) +
geom_text(aes(label = required)) +
labs(
title = "Key Assessment Schedule",
x = "",
y = ""
) +
theme_minimal() +
theme(
axis.text.x = element_text(angle = 45, hjust = 1),
panel.grid = element_blank()
)
}
# Combine all plots
all_plots <- grid.arrange(
create_study_timeline(),
create_treatment_diagram(),
create_assessment_table(),
ncol = 1,
heights = c(1, 1.2, 1.5)
)